/*
 * JEF - Copyright 2009-2010 Jiyi (mr.jiyi@gmail.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package jef.database.jsqlparser.visitor;

import jef.database.jsqlparser.expression.Table;
import jef.database.jsqlparser.statement.SqlAppendable;
import jef.database.jsqlparser.statement.select.SelectExpressionItem;

/**
 * Anything between "SELECT" and "FROM"<BR>
 * (that is, any column or expression etc to be retrieved with the query)
 */
public interface SelectItem extends SqlAppendable{

    public void accept(SelectItemVisitor selectItemVisitor);
    
    /**
     * 返回查询表达式。如果是AllColumn * /t.*等格式则抛出异常，因此在调用此方法之前要先按isAllColumns进行判断
     * @return
     */
    public SelectExpressionItem getAsSelectExpression();
    
    
    /**
     * 如果是AllColumn类型 * /t.*返回其所属表。如果是Expression类型会抛出异常
     * @return
     */
    public Table getTableOfAllColumns();

	/**
	 * 拼入对象
	 * @param sb
	 * @param noGroupFunc
	 */
	public String getStringWithoutGroupFuncAndAlias();
	
	/**
	 * 是否为 t.*, *等格式的
	 * @return
	 */
	public boolean isAllColumns();
	
	
}
